package com.mce.nebula.repository;

import com.mce.nebula.entity.TenantService;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.Optional;
import java.util.List;

/**
 * 租户服务数据访问接口
 */
@Repository
public interface TenantServiceRepository extends JpaRepository<TenantService, Long> {
    
    /**
     * 根据服务ID查找
     */
    Optional<TenantService> findByServiceId(String serviceId);
    
    /**
     * 根据租户ID查找服务列表
     */
    List<TenantService> findByTenantId(String tenantId);
    
    /**
     * 根据租户ID和服务别名查找
     */
    Optional<TenantService> findByTenantIdAndServiceAlias(String tenantId, String serviceAlias);
    
    /**
     * 根据服务类型查找
     */
    List<TenantService> findByServiceType(String serviceType);
    
    /**
     * 根据服务来源查找
     */
    List<TenantService> findByServiceSource(String serviceSource);
    
    /**
     * 根据创建状态查找
     */
    List<TenantService> findByCreateStatus(String createStatus);
    
    /**
     * 根据租户ID和服务组ID查找
     */
    List<TenantService> findByTenantIdAndTenantServiceGroupId(String tenantId, Integer groupId);
    
    /**
     * 根据服务组ID查找
     */
    List<TenantService> findByTenantServiceGroupId(Integer groupId);
    
    /**
     * 检查服务别名是否存在
     */
    @Query("SELECT COUNT(ts) > 0 FROM TenantService ts WHERE ts.tenantId = :tenantId AND ts.serviceAlias = :serviceAlias")
    boolean existsByTenantIdAndServiceAlias(@Param("tenantId") String tenantId, 
                                           @Param("serviceAlias") String serviceAlias);
    
    /**
     * 根据企业ID统计镜像服务数量
     */
    @Query("SELECT COUNT(ts) FROM TenantService ts " +
           "JOIN Tenant t ON ts.tenantId = t.tenantId " +
           "WHERE t.enterpriseId = :enterpriseId AND ts.serviceSource = 'docker_image'")
    long countImageServicesByEnterpriseId(@Param("enterpriseId") String enterpriseId);
}
